import { connect } from 'react-redux'
let mapState = function (myComponet, stateData) {
  //myComponet 代表需要绑定的组件，stateDate数组类型代表需要绑定的状态数据的名称
  const mapStateToProps = (state) => {
    let states = {}
    //stateData
    for (let index in stateData) {
      states[stateData[index]] = state[stateData[index]]
    }
    // console.log(states);

    return states

  }
  return connect(mapStateToProps)(myComponet)
}
//为了组件添加修改store中的
let mapDisPatch = function (myComponet, actions) {
  let mapDisPatchToProps = function (dispatch) {
    //当前对象将要保存映射方法，最终传递给当前组件的props属性
    let dispatchs = {};
    //循环注册方法(方法给当前组件)
    for (let index in actions) {
      //取出当前要注册的函数配置
      let action = actions[index];
      //判断是否有参数需要传递到store内部
      if (action.params) {
        //向对象中添加函数
        dispatchs[action.type] = (params) => {
          //但是被触发时，向store中传递action，要求state数据改变
          dispatch({
            ...action,
            params
          })
        }
      } else {
        // dispatchs[]
        dispatchs[action.type] = () => {
          //但是被触发时，向store中传递action，要求state数据改变
          dispatch({type:action.type})
        }
      }
    }
    return dispatchs;
  }

  //mapDisPatchToProps 会在内部生成一个对象，对象是一个键值对，键是方法名，键对应的值是函数体，此对象会被connect传递到myComponet变量代表的组件的props中，所以我们在myComponet的组件中使用：this.props.键名
  return connect(null, mapDisPatchToProps)(myComponet)
}
export { mapState, mapDisPatch }